/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#include "ui文件设置视口.h"
#include <UI/布局.h>

#include "A_引擎/文件工程/配置.h"





static void on_文件路径组件布局(C_Widget* self, C_Widget** w, uint32 num) {
	//float32 高度 = 20;
	//float32 框宽度 = self->m_Size.x - 64;
	vec2 项大小 = { self->m_Size.x - 100, self->m_Size.y };
	//
	////if (self->m_父部件) {
	//	//f_布局_扩展视口纵向滚动(self->m_父部件, self, C_Widget::g_鼠标.lZ * 40);
	////}
	//float32 y = self->m_扩展视口属性->m_中心.y;
	////float32 y = 0;
	//float32 边宽度 = 4;
	//vec2 框位置 = { 60, 2 };
	for (uint32 i = 0; i < num; ++i) {
		w[i]->m_间隔宽度 = 4;
	}
	//
	//self->f_setW(self->m_Size.x);
	////self->f_setH(框位置.y + 20);
	//self->f_setH(DEF_Max(框位置.y, self->m_父部件->m_Size.y));

	f_VBOX布局({ 100,1 }, 项大小, w, num);

	//f_widget_单个部件裁剪(self, { self->m_Pos.x, self->m_Pos.y, self->m_父部件->m_Size.x, self->m_父部件->m_Size.y }, self->m_父部件->m_GlobalLoc);
	//f_widget_单个部件裁剪(self, { 0, 0, self->m_父部件->m_Size.x, self->m_父部件->m_Size.y }, self->m_父部件->m_GlobalLoc);
}



static void on_快捷键编辑框布局(C_Widget* self, C_Widget** w, uint32 num) {
	float32 高度 = 30;
	float32 框宽度 = self->m_Size.x - 64;
	vec2 项大小 = { 框宽度 - 12, 高度 };

	//if (self->m_父部件) {
		//f_布局_扩展视口纵向滚动(self->m_父部件, self, C_Widget::g_鼠标.lZ * 40);
	//}
	float32 y = self->m_扩展视口属性->m_中心.y;
	//float32 y = 0;
	float32 边宽度 = 4;
	vec2 框位置 = {60, 2};
	for (uint32 i = 0; i < num; ++i) {
		auto e = w[i]->f_get更新组件();

		float32 总高度 = 边宽度;
		//for (uint32 k = 0; k < e.m_Num; ++k) {
		//	
		//	e.m_W[k]->f_setPos({ 边宽度, 总高度});
		//	e.m_W[k]->f_setSize(项大小);
		//
		//	总高度 += 高度 + 边宽度;
		//}

		总高度 += f_ui_get展开组件头大小(w[i]);
		auto item = f_ui_get展开组件内部组件(w[i]);

		//float32 boxSize = item.m_Num * 24;
		float32 boxSize = f_ui_get展开组件头大小(w[i]);
		boxSize += item.m_Num * 20;
		//for (uint32 i = 0; i < num; ++i) {
		//}
		

		总高度 += boxSize + 边宽度;
		//总高度 += 高度 + 边宽度;

		w[i]->f_setPos(框位置 + vec2{0, y});
		w[i]->f_setSize({ 框宽度, 总高度 });

		框位置.y += 总高度 + 8;
	}

	self->f_setW(self->m_Size.x);
	//self->f_setH(框位置.y + 20);
	self->f_setH(DEF_Max(框位置.y, self->m_父部件->m_Size.y));


	//f_widget_单个部件裁剪(self, { self->m_Pos.x, self->m_Pos.y, self->m_父部件->m_Size.x, self->m_父部件->m_Size.y }, self->m_父部件->m_GlobalLoc);
	f_widget_单个部件裁剪(self, { 0, 0, self->m_父部件->m_Size.x, self->m_父部件->m_Size.y }, self->m_父部件->m_GlobalLoc);
}

static void on_操作设置视口绘制(C_Widget* self, S_2D画布* 画布) {
	C_文件设置面板* box = (C_文件设置面板*)self;

	//box->m_背景绘制.m_属性 = f_vg_gen属性(画布);
	//
	//S_凸边图元 图元 = {};
	//图元.属性 = f_vg_get属性指针(画布, box->m_背景绘制.m_属性);
	//box->m_背景绘制.f_Draw(画布, 图元, E_笔刷类型::e_单色填充);
	////图元 = {};
	////图元.属性 = f_vg_get属性指针(画布, box->m_背景绘制.m_属性);
	//
	//box->m_图标绘制.f_Draw单色(画布, box->m_背景绘制.m_属性, S_UI主题::ui_默认图标);
	//
	//
	//auto& 字体 = f_surface_get字体(*self->m_UIctx, S_UI主题::ui_默认字体);
	//box->m_标题绘制.f_Draw(画布, &字体, box->m_背景绘制.m_属性);
	//box->m_项标题绘制.f_Draw(画布, &字体, box->m_背景绘制.m_属性);
}

static void on_操作设置视口变换(C_Widget* self) {
	C_文件设置面板* box = (C_文件设置面板*)self;

	float32 y = self->m_扩展视口属性->m_中心.y;

	//S_2D_PanelAttr 属性 = { {1,1}, {0,0}, 1, 3 };
	//f_vg_set属性(self->m_画布, box->m_背景绘制.m_属性, 属性);
	//
	//
	//auto e = self->f_get更新部件();
	//
	//box->m_背景绘制.f_alloc(e.m_Num * 3 + 1);
	//box->m_图标绘制.f_alloc(e.m_Num);
	//box->m_标题绘制.f_alloc(e.m_Num, 128);
	//
	//uint32 项名称数量 = 0;
	//for (uint32 i = 0; i < e.m_Num; ++i) {
	//	uint32 sn = e.m_W[i]->f_get子部件数量();
	//	mat3X2 mat;
	//	//mat.row0 = e.m_W[i]->m_Pos;
	//	//mat.row1 = e.m_W[i]->m_Size;
	//	//mat.row2 = {3, 0};
	//	//box->m_背景绘制.f_set单色填充(i+1, mat, S_UI主题::uic_面板背景, S_Widget预设图元::m_圆角矩形);
	//
	//	f_ui_展开框组件变换(e.m_W[i], &mat, 0);
	//	mat.row0 += self->m_Pos;
	//	mat.row2 = { 3, 0 };
	//	box->m_背景绘制.f_set单色填充(i * 3 + 1, mat, S_UI主题::uic_面板背景 - S_RGBA8UI{10, 10, 10, 0}, S_Widget预设凸包图元::m_圆角矩形);
	//	
	//
	//	f_ui_展开框组件变换(e.m_W[i], &mat, 1);
	//	//mat.row0 += self->m_Pos;
	//	box->m_背景绘制.f_set单色填充(i * 3 + 2, mat, S_UI主题::uic_面板背景 + S_RGBA8UI{5, 5, 5, 0}, S_Widget预设凸包图元::m_圆角矩形);
	//	mat.row0 += mat.row1 * 0.5;
	//	mat.row1 *= 0.8;
	//	box->m_图标绘制.f_set("下", i, mat, S_UI主题::uic_文字颜色);
	//
	//	f_ui_展开框组件变换(e.m_W[i], &mat, 2);
	//	mat.row0 += self->m_Pos;
	//	box->m_背景绘制.f_set单色填充(i * 3 + 3, mat, S_UI主题::uic_面板背景, S_Widget预设凸包图元::m_圆角矩形);
	//	mat.row0.x += 20;
	//	//box->m_标题绘制.f_设置文本({ mat.row0, mat.row1 }, S_UI主题::uic_文字颜色, i, e.m_W[i]->m_WName);
	//
	//
	//	auto item = f_ui_get展开组件内部组件(e.m_W[i]);
	//	项名称数量 += item.m_Num;
	//	//for (uint32 i = 0; i < item.m_Num; ++i) {
	//	//	mat.row0 += item.m_W[i]->m_Pos;
	//	//}
	//}
	//
	//box->m_项标题绘制.f_alloc(项名称数量, 128);
	//uint32 itemOffset = 0;
	//for (uint32 i = 0; i < e.m_Num; ++i) {
	//	//uint32 sn = e.m_W[i]->f_get子部件数量();
	//	
	//
	//	auto item = f_ui_get展开组件内部组件(e.m_W[i]);
	//	float32 头高度 = f_ui_get展开组件头大小(e.m_W[i]);
	//	for (uint32 k = 0; k < item.m_Num; ++k) {
	//		mat3X2 mat{};
	//		mat.row0 = item.m_W[k]->m_Pos + e.m_W[i]->m_Pos + item.m_W[k]->m_父部件->m_Pos;
	//		mat.row0.y += 10;
	//		//mat.row0 = item.m_W[k]->m_Pos + e.m_W[i]->m_Pos + item.m_W[k]->m_父部件->m_Pos;
	//		mat.row0.x -= 90;
	//		mat.row1 = {90, 20};
	//
	//		auto name = f_ui_getProp(item.m_W[k]).m_Name;
	//		
	//		box->m_项标题绘制.f_绘制文本({ mat.row0, mat.row1 }, S_UI主题::uic_文字颜色, itemOffset, name + L": ", E_对齐方式::e_右对齐);
	//		++itemOffset;
	//	}
	//}
	//
	//
	//mat3X2 mat;
	//mat.row0 = self->m_Pos;
	//mat.row1 = self->m_Size;
	//mat.row2 = { 3, 0 };
	//box->m_背景绘制.f_set单色填充(0, mat, S_UI主题::uic_面板背景 - S_RGBA8UI{30, 30, 30, 0}, S_Widget预设凸包图元::m_矩形);
}

C_文件设置面板::C_文件设置面板(S_UI渲染环境& ctx) : C_Widget(&ctx) {
	m_WName = u"文件设置";

	f_widget_开启视口属性(this);
	m_扩展视口属性->m_中心 = {};
	f_setSize({ 1024, 1024 });

	
	m_着色器编译器路径 = f_alloc_PathProp(&S_引擎配置::m_着色器编译器路径, u"临时文件路径");
	m_着色器头文件路径 = f_alloc_PathProp(&S_引擎配置::m_着色器头文件路径, u"临时文件路径");
	m_临时文件路径 = f_alloc_LineStrProp(&S_引擎配置::g_工程文件临时路径, u"临时文件路径");
	m_配置文件路径 = f_alloc_PathProp(&S_引擎配置::g_配置文件路径, u"配置文件路径");
	m_文件备份数量 = f_alloc_UI32Prop(&S_框架::g_文件备份数量, u"文件备份数量");


	C_Widget* box = f_ui_创建组件();
	box->mf_布局 = on_文件路径组件布局;

	C_Widget* w = f_ui_PropWidget(ctx, m_临时文件路径, E_方向::e_纵向);
	w->m_是否延展 = {true, true};
	box->f_添加子组件(w);
	
	w = f_ui_PropWidget(ctx, m_着色器编译器路径, E_方向::e_纵向, (C_Widget*)S_框架::g_文件窗口);
	w->m_是否延展 = { true, true };
	box->f_添加子组件(w);
	
	w = f_ui_PropWidget(ctx, m_文件备份数量, E_方向::e_纵向);
	w->m_是否延展 = { true, true };
	w->m_绘制标题 = true;
	box->f_添加子组件(w);

	



	box = f_ui_创建组件();
	box->mf_布局 = on_文件路径组件布局;

	w = f_ui_PropWidget(ctx, m_着色器头文件路径, E_方向::e_纵向, (C_Widget*)S_框架::g_文件窗口);
	w->m_是否延展 = { true, true };
	box->f_添加子组件(w);

	w = f_ui_PropWidget(ctx, m_配置文件路径, E_方向::e_纵向, (C_Widget*)S_框架::g_文件窗口);
	w->m_是否延展 = { true, true };
	box->f_添加子组件(w);

	C_Widget* 编译文件 = f_ui_创建展开框(ctx, box);
	//C_Widget* 节点键 = f_ui_创建展开框(ctx);
	C_Widget* 工程文件 = f_ui_创建展开框(ctx, box);

	f_添加子组件(工程文件);
	f_添加子组件(编译文件);

	工程文件->m_WName = u"工程文件";
	编译文件->m_WName = u"编译文件";
	//f_添加子组件(节点键);



	mf_布局 = on_快捷键编辑框布局;
	mf_绘制 = on_操作设置视口绘制;
	mf_变换 = on_操作设置视口变换;
}

C_文件设置面板::~C_文件设置面板() {
}



